home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 September / CHIP Eylül 1998.iso / freeware / mp3 / nad093 / frontend.txt next >
Text File  |  1998-04-20  |  5KB  |  151 lines

  1. Writing code to 'interface' to NAD
  2. ----------------------------------
  3.  
  4.     Many external programs, such as playlist editors etc, could benefit from being
  5. able to 'talk' to NAD. This documents outlines the procedures needed to do so.
  6.  
  7. ------------------------------------------------------------------------------------------
  8.  
  9. The NAD Main Window
  10. -------------------
  11.  
  12.     The Main NAD window can be obtained by doing the following(in C)
  13.  
  14. const TCHAR g_szClassName[] = TEXT("NadMainWindow");
  15. HWND NadWindow = FindWindow(g_szClassName, NULL);
  16.  
  17. ------------------------------------------------------------------------------------------
  18.  
  19. Command ID's
  20. ------------
  21.  
  22. #define ID_PLAY                         40010
  23. #define ID_STOP                         40011
  24. #define ID_PAUSE                        40012
  25. #define ID_NEXTTRACK                    40013
  26. #define ID_PREVIOUSTRACK                40014
  27. #define ID_EXPANDWINDOW                 40105    // this causes the NAD window to 'expand'
  28.                         // or contract (like pressing the notch)
  29.  
  30. These messages are send to the main NAD window using the following code:
  31.  
  32. SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(ID_EXPANDWINDOW, 0), (LPARAM)NULL);
  33. (you can change the ID_EXPANDWINDOW to any of the above ID_'s...)
  34.  
  35. ------------------------------------------------------------------------------------------
  36.  
  37. The NAD Communication System
  38. ----------------------------
  39.  
  40.     These messages are sent to NAD using a WM_COPYDATA message. You can use this system
  41. as an 'alternative' to starting a new NAD.EXE with a path to a playlist. Or to start NAD
  42. playing a certain file from the playlist. NAD uses this system to talk to itself. If you have
  43. multiple instances turned off.. See below for examples.
  44.  
  45. #define NCM_RESETPLAYLIST    0
  46. #define NCM_ADDTOPLAYLIST    1
  47. #define NCM_PLAYFILE        2
  48. #define NCM_PLAYITEM        3
  49. #define NCM_PLAYFROMSTART    4
  50. #define NCM_SAVEPLAYLIST    5
  51. #define NCM_SHUFFLE        6
  52.  
  53.  
  54. Example 1. Resetting the NAD internal playlist:
  55. -----------------------------------------------
  56.  
  57. COPYDATASTRUCT    cds;
  58.  
  59. cds.dwData = NCM_RESETPLAYLIST;
  60. cds.cbData = 0;
  61. cds.lpData = NULL;
  62.  
  63. SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
  64.  
  65. The playlist will now be empty!
  66.  
  67.  
  68. Example 2. 'Downloading a playlist':
  69. ------------------------------------
  70.  
  71. COPYDATASTRUCT    cds;
  72. char Playlist[1000][_MAX_PATH]; // you could fill this will FULL filenames, or use a linked list
  73. // there is NO limit to the number of files NAD can hold in a playlist except for memory...
  74.  
  75. int x;
  76.  
  77. for(x=0; x<1000; x++)
  78. {
  79.     cds.dwData = NCM_ADDTOPLAYLIST;
  80.     cds.cbData = lstrlen(Playlist[x]);     // This MUST be the LENGTH of the filename
  81.     cds.lpData = Playlist[x];        // This is the FILENAME
  82.     sendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
  83. }
  84.  
  85. The playlist will now be populated with the Item from the array!.
  86.  
  87.  
  88. Example 3. Telling NAD to play an Item/file.
  89. --------------------------------------------
  90.  
  91. 1>
  92. cds.dwData = NCM_PLAYFROMSTART;
  93. cds.cbData = 0;
  94. cds.lpData = NULL;
  95. SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
  96. This tells NAD to start playing from the START of the playlist.
  97.  
  98. 2>
  99. cds.dwData = NCM_PLAYFILE;
  100. cds.cbData = strlen("C:\\test.mp3");
  101. cds.lpData = "C:\\test.mp3";
  102. SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
  103. This tells NAD to reset the playlist and start playing 'C:\test.mp3'.
  104.  
  105. 3>
  106. cds.dwData = NCM_PLAYITEM;
  107. cds.cbData = 5;
  108. cds.lpData = NULL;
  109. SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
  110. This tells NAD to play Item number 5 from the playlist... the alternative is:
  111.  
  112. 4>
  113. cds.dwData = NCM_PLAYITEM;
  114. cds.cbData = -1;        // NOTE: the -1....
  115. cds.lpData = "C:\\test.mp3\0\0";// This string ABSOLUTLEY MUST be DOUBLE NULL terminated(\0\0)
  116. SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
  117. This tells NAD to search through the playlist for the FIRST occurence of the filename, set it to
  118. be the CURRENT item and PLAY... the next track will be whatever comes after this file...
  119.  
  120. ------------------------------------------------------------------------------------------
  121.  
  122. Other Miscelleneous Messages
  123. ----------------------------
  124.  
  125. For those of you who dont know WM_APP is defined in WINDOWS.H as 0x8000(HEX) or 32768(DEC)
  126. you dont need to define this USUALLY..... 
  127.  
  128. These commands are sent to the NAD window and NAD will RETURN the value. eg:
  129.     DWORD Playtime = SendMessage(NadWindow, WM_GETCURRENTPLAYTIME, 0, 0);
  130.     DWORD Seconds = Playtime/1000; // because its in MS....
  131.  
  132. #define WM_GETCURRENTPLAYTIME        WM_APP + 0x0700    // returns playtime in MS
  133. #define WM_GETCURRENTFRAME        WM_APP + 0x0701 // returns the last decoded frame
  134. #define WM_GETMAXFRAME            WM_APP + 0x0702 // return the ESTIMATED number of frames
  135.                             // this is -1 for a URL stream.
  136. #define WM_GETVOLUME            WM_APP + 0x0703 // returns the CURRENT volume Level
  137. #define WM_SETVOLUME            WM_APP + 0x0704 // lParam = the NEW volume
  138. // VOLUME values are between 0 and 64, setting to more (or less) will have NO effect...
  139.  
  140. #define WM_SETCURRENTFRAME        WM_APP + 0x0705 // lParam = the Frame to jump to
  141.  
  142. #define WM_GETPLAYSTATUS        WM_APP + 0x0706    // returns integer value(see below)
  143.  
  144.  
  145.  
  146. // these are the return value from WM_SETPLAYSTATUS
  147. #define STAT_PLAYING            0
  148. #define STAT_PAUSED            1
  149. #define STAT_STOPPED            2
  150.  
  151.